package FileDemo;

import java.io.File;

/**
 * 1）创建测试类FileTest1；
 * 2）在FileTest1类的main函数中封装父目录../resources/abc的对象parent；
 * 3）调用递归扫描的函数scanFolders(parent);
 * 4）自定义函数scanFolders()，使用父目录对象parent调用listFiles()函数获得父目录下所有儿子的File数组files;
 * 5）循环遍历，获取每个儿子对象file；
 * 6）使用file对象调用isDirectory()函数判断是否是文件夹；
 * 7）如果是文件夹，则递归调用scanFolders(file)函数;
 * 8）如果不是文件夹，肯定是文件，使用file对象调用getName()函数获得文件的全名，调用endsWith()函数判断后缀名是否是.jpg,如果是输出文件所属的绝对路径；
 */
public class FileTest1 {
    public static void main(String[] args) {
        //封装父目录的对象
        File parent = new File("./src/resources/abc");
        //调用函数查找文件或者文件夹
        scanFolderAndFile(parent);
    }

    public static void scanFolderAndFile(File parent) {
        //判断parent是否为null
        if (parent == null) {
            throw new RuntimeException("不能传递null");
        }
        //判断文件夹是否存在
        if (!parent.exists()) {
            throw new RuntimeException("文件夹不存在");
        }
        //传递的是文件夹，不能是文件
        if (parent.isFile()) {
            throw new RuntimeException("只能是文件夹");
        }
        // 获取父目录下面的所有儿子
        File[] files = parent.listFiles();
        //遍历上述数组
        for (File file : files) {
            /*
             * 如果file对象中封装的是文件夹，那么可以把此文件夹当成父类
             * 在扫描其下面的儿子
             */
            if (file.isDirectory()) {
                //说明获得的是文件夹 再次回到scanFolderAndFile()函数处执行该函数
                scanFolderAndFile(file);
            } else {
                /*
                 * 说明file中封装的是文件
                 * 获得文件名字，然后判断后缀名是否是.jpg
                 * 如果是，则获取绝对路径
                 */
                boolean boo = file.getName().endsWith(".txt");
                if (boo) {
                    //说明后缀名是.jpg的文件 输出绝对路径
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
}
